"""对话会话数据库操作：封装会话的创建、查询、更新"""
from typing import List, Optional, Dict
from datetime import datetime
import uuid
from db.client import session_collection
from config.constants import DEFAULT_SESSION_TITLE
from models.request import CreateSessionRequest

def create_chat_session(
    user_id: str,
    title: Optional[str] = None
) -> Dict:
    """
    创建新对话会话
    :param user_id: 用户ID
    :param title: 会话标题（默认：新对话）
    :return: 新创建的会话信息
    """
    session_id = str(uuid.uuid4())
    session = {
        "session_id": session_id,
        "user_id": user_id,
        "title": title or DEFAULT_SESSION_TITLE,
        "created_at": datetime.now(),
        "updated_at": datetime.now()
    }
    session_collection.insert_one(session)
    return session

def get_user_sessions(user_id: str) -> List[Dict]:
    """
    获取用户的所有对话会话
    :param user_id: 用户ID
    :return: 按最后更新时间降序的会话列表
    """
    query = {"user_id": user_id}
    # 按更新时间降序（最新的会话在前）
    return list(session_collection.find(query).sort("updated_at", -1))

def get_session_by_id(session_id: str, user_id: str) -> Optional[Dict]:
    """
    获取指定会话（带用户验证，确保数据安全）
    :param session_id: 会话ID
    :param user_id: 用户ID
    :return: 会话信息（None表示不存在或无权限）
    """
    return session_collection.find_one({
        "session_id": session_id,
        "user_id": user_id
    })

def update_session_updated_at(session_id: str) -> None:
    """更新会话的最后更新时间（对话后调用）"""
    session_collection.update_one(
        {"session_id": session_id},
        {"$set": {"updated_at": datetime.now()}}
    )

def update_session_title(session_id: str, user_id: str, title: str) -> bool:
    """
    修改会话标题
    :return: True表示修改成功，False表示会话不存在
    """
    result = session_collection.update_one(
        {"session_id": session_id, "user_id": user_id},
        {"$set": {"title": title, "updated_at": datetime.now()}}
    )
    return result.modified_count > 0